Vim 편집기 기본 사용법 정리. 커서·화면 이동, 수정/복사/붙여넣기/삭제, 검색·치환, 창 분할, 행 이동, Control 문자 표기.
NOTE
원문의 방향키(h/j/k/l), 분할 명령 방향, x 동작 등 일반지식 오류를 교정함(사실 확인 권장).
📌 개념
Vim은 명령 모드(이동/편집 명령)와 입력 모드(텍스트 입력)를 분리해, 손을 홈 로우에서 떼지 않고 마우스 없이 파일을 탐색·수정할 수 있게 설계됐다. 리눅스 서버에는 GUI 에디터가 없는 경우가 많아, 원격 접속 환경에서 텍스트/설정 파일을 편집할 표준 도구로 널리 쓰인다.
자주 쓰는 명령:
복사: yiw(현재 단어 복사), [숫자]yy(현재 커서 기준 n줄 복사)
되돌리기: u(이전 실행 취소), Ctrl + r(다시 실행)
💻 예시
글자 이동
방향키로 한 글자씩 이동하는 대신 단어/행 단위로 점프해 이동 속도를 높이기 위한 명령들이다.
w: 다음 단어 첫 글자
e: 다음 단어 마지막 글자
b: 이전 단어 첫 글자
0: 현재 행의 맨 앞
$: 현재 행의 맨 끝
화면 이동
큰 로그/설정 파일을 스크롤 없이 페이지 단위로 빠르게 훑어보기 위한 명령들이다.
Ctrl + b: 한 화면 위로 (page up)
Ctrl + f: 한 화면 아래로 (page down)
Ctrl + u / Ctrl + d: 반 화면 위/아래
Ctrl + y / Ctrl + e: 한 행 위/아래
커서 이동 (h/j/k/l)
h: 왼쪽
j: 아래
k: 위
l: 오른쪽
수정
x+i로 지우고 다시 입력 모드에 들어가는 대신, “삭제와 동시에 입력 모드 진입”을 한 번에 처리해 타이핑 수를 줄이는 명령들이다.
r: 커서 위치 한 글자 수정
cw: 현재 단어 끝까지 수정
[숫자]s: n글자 수정 (ex: 5s = 5글자 수정)
C: 커서 위치부터 행 끝까지 수정
복사 / 붙여넣기 / 삭제
yy: 한 줄 복사
p: 붙여넣기
dd: 한 줄 삭제
x: 한 글자 삭제
J: 아래 줄을 현재 줄로 끌어올리기
선택 (비주얼 모드)
여러 줄/여러 글자를 한 번에 지우거나 복사해야 할 때, 마우스 드래그 없이 키보드만으로 범위를 지정하기 위한 모드다.
Ctrl + v: 블록(범위) 선택
Shift + v: 한 줄 선택
줄 번호 / 찾기 / 치환
:set nu " 줄 번호 표시/검색어 " 커서 아래 방향 검색?검색어 " 커서 위 방향 검색n / N " 다음 / 이전 검색 결과로 이동:%s/대상문자열/변경문자열/g " 파일 전체에서 대상 문자열을 변경문자열로 치환
커서 아래 단어 강조 검색 (* / # / hlsearch)
커서를 단어 위에 놓고 키를 누르면 파일 안의 같은 단어를 전부 형광펜으로 칠해주는 동작이다 — 검색과 하이라이트 두 가지가 결합된 기능이다.
* " 커서 아래 단어를 정확히 일치(단어 경계 기준)로 아래 방향 검색 + 다음 위치로 점프# " 같은 방식으로 위 방향 검색 + 이전 위치로 점프g* " 단어 경계 무시하고 부분 일치까지 검색 (예: foo 커서에서 foobar도 걸림)g# " g*의 위 방향 버전
검색된 단어가 화면 전체에서 색칠되어 보이는 건 */# 자체 기능이 아니라 hlsearch 옵션이 켜져 있어서다.
:set hlsearch " 검색 결과 전부 하이라이트 (기본 꺼져 있는 배포판도 있음):set incsearch " 검색어 입력 중에도 실시간으로 미리 하이라이트
하이라이트를 잠깐 끄고 싶을 때(색칠이 거슬릴 때): :noh (:nohlsearch의 축약). 검색 자체를 끄는 게 아니라 지금까지의 하이라이트만 지운다 — n/N으로 다시 이동하면 하이라이트가 다시 켜진다.
~/.vimrc에 자주 추가하는 조합
set hlsearchset incsearchnnoremap <silent> <C-l> :nohlsearch<CR> " Ctrl+L 한 번으로 하이라이트 끄기
셸 명령 실행 / 잡 제어
:!명령어 " vim 안에서 셸 명령 실행 (결과 확인 후 Enter 누르면 vim으로 복귀):sh " 셸로 나감 (되돌아오기: exit)Ctrl + z " vim 창 내리기(백그라운드)fg " vim으로 되돌아오기
:!명령어에서 %는 현재 편집 중인 파일명으로 치환된다. 지금 보던 파일의 특정 줄 범위를 바로 확인할 때 유용하다.
:!sed -n '344,410p' % " 현재 파일의 344~410줄만 출력:r !sed -n '344,410p' 다른파일 " 명령 결과를 커서 아래에 삽입:344,410!sed 's/old/new/g' " 344~410줄을 명령 출력으로 교체 (실행 전 저장 또는 u로 되돌리기)
창(윈도우) 분할
두 파일을 비교하거나(예: 설정 파일 원본과 수정본), 한 파일의 다른 위치를 동시에 참고하며 편집할 때 화면을 나눠 쓰기 위한 기능이다.
수평 분할(위아래): 같은 파일 :[크기]sp, 다른 파일 :[크기]sp [파일명] (추천 크기 30)
수직 분할(좌우): 같은 파일 :[크기]vs, 다른 파일 :[크기]vs [파일명] (추천 크기 100)
다음 창으로 커서 이동: Ctrl + w, w
현재 창만 두고 나머지 닫기: Ctrl + w, o
여러 파일을 열었을 때 다음 문서: :n
행 이동
gg: 첫 행으로 이동
[숫자]G (숫자 입력 + Shift + g): 원하는 행 번호로 이동
G (Shift + g): 맨 끝 행으로 이동
Home: 행의 첫 번째로 이동
$ (Shift + 4): 행의 마지막 문자로 이동
Control 문자 표기법
입력 방법: Ctrl + v → Ctrl + [원하는 문자]
예) Ctrl + v → Ctrl + m → ^M
추가로 자주 쓰는 명령
사용법
설명
비고
gg=G
문서 전체 자동 정렬(들여쓰기)
U
현재 커서 위치 줄 전체를 되돌리기
undo (u는 마지막 실행 하나만 되돌림)
Ctrl + u
(입력 모드) 커서 위치부터 줄 시작까지 삭제
insert 모드 전용, 위 화면 이동의 Ctrl+u(반 화면 위)와는 모드가 다름
:[범위]s/[기존단어]/[새단어]/gc
단어 바꾸기, 바꿀 때마다 확인 절차 추가
예: :%s/OLD_NAME/NEW_NAME/gc
gg + Ctrl+v + G + y
문서 전체를 비주얼 블록으로 선택해 복사
:vsp [경로] / :sp [경로]
좌우 / 상하 분할하며 파일 열기
위 “창 분할” 항목의 :vs/:sp와 동일 계열, 분할과 동시에 다른 파일을 바로 열 때
파일 탐색기(디렉터리 트리) 자동 표시 — netrw
vim은 플러그인 없이도 디렉터리 탐색기가 내장되어 있다. 이름은 netrw. 별도 설치 없이 바로 쓸 수 있다.
지금 당장 켜보기
vim . # 현재 폴더를 넘기면 netrw가 자동으로 디렉터리 목록을 보여줌vim 폴더경로/ # 특정 폴더를 지정해도 동일
netrw 창 안에서: Enter로 파일/폴더 열기, -로 상위 폴더로, %로 새 파일 생성, d로 새 디렉터리 생성.
파일을 열 때마다 사이드바로 자동으로 같이 띄우기
vim main.c처럼 파일 하나만 지정해서 열어도 왼쪽에 트리를 자동으로 띄우려면 ~/.vimrc에 설정을 추가해야 한다.
let g:netrw_banner = 0 " netrw 상단 안내 배너(도움말 텍스트) 숨기기let g:netrw_liststyle = 3 " 들여쓰기된 트리 모양으로 표시 (0: 한 줄씩, 1: 상세, 2: 넓게)let g:netrw_winsize = 25 " 사이드바 폭 (창 전체 폭의 25%)autocmd VimEnter * ++nested Lexplore | wincmd p
Lexplore는 netrw를 왼쪽 고정 사이드바로 여는 명령이다(일반 Explore/Vexplore는 그냥 창 분할이라 탐색기 창과 파일 창을 계속 오가며 쓰기 불편함).
autocmd VimEnter * ... Lexplore | wincmd p는 “vim이 켜질 때 사이드바를 열고, 곧바로 커서를 원래 파일 창으로 돌려놔라”는 뜻이다 — 이게 없으면 vim을 열 때마다 커서가 탐색기 창에 가 있어서 바로 타이핑을 못 한다.
자동 실행이 거슬리면 토글 방식으로
커밋 메시지 편집(git commit), diff 모드 등 vim이 다른 용도로 열릴 때도 매번 사이드바가 뜨는 게 번거로울 수 있다. 이럴 때는 autocmd VimEnter 자동 실행 대신 단축키로 필요할 때만 토글하는 방식을 더 선호한다.
nnoremap <leader>e :Lexplore<CR> " 예: 스페이스+e 로 켜고 끄기
NERDTree와의 차이
검색해보면 흔히 나오는 NERDTree는 플러그인(vim-plug 등 플러그인 매니저 설치 필요)이고, 여기서 설명한 netrw는 vim 자체 내장 기능이라 폐쇄망·구버전 vim에서도 추가 설치 없이 바로 쓸 수 있다는 차이가 있다. 기능은 NERDTree가 아이콘·Git 상태 표시 등으로 더 화려하지만, 터미널 환경에서 디렉터리 트리 자체가 목적이면 netrw만으로 충분하다.